package chatlink;


import java.sql.*;

public class DataAccess {
    
    private Connection _conn = null;
    private Statement _stm = null;
    private ResultSet _rs = null;
    private PreparedStatement _ps = null;

    /**
     * Lấy thông tin kết nối
    *
     */
    private Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://localhost/chatlinkdb", "root", "");
    }

    /**
     * Đăng nhập
     *
     * @param accountInfo  Thông tin người dúng
     * @return Đối tượng <code>Account</code>
     *
     */
    public Account MemberLogin(Account accountInfo) throws ClassNotFoundException, SQLException {
        Account account = null;
        _conn = getConnection();
        _stm = _conn.createStatement();
        _rs = _stm.executeQuery("SELECT * FROM account");
        while (_rs.next()) {
            if (accountInfo.getAccountId().equals(_rs.getString("AccountId"))
                    && accountInfo.getPassword().equals(_rs.getString("Password"))) {
                account = accountInfo;
                return account;
            }
        }
        return account;
    }

    /**
     * Đăng ký
     *
     * @param newAccount Thông tin người dùng mới
     * @return <code>true</code> - Đăng ký thành công<br/>
     * @return <code>false</code> - Đăng ký thất bại
     *
     *
     */
    public boolean Register(Account newAccount) throws ClassNotFoundException, SQLException {
        _conn = getConnection();
        if (!CheckExist(newAccount)) {
            _ps = _conn.prepareStatement("INSERT INTO account VALUES (?, ?, ?)");
            _ps.setString(1, newAccount.getAccountId());
            _ps.setString(2, newAccount.getPassword());
            _ps.setString(3, newAccount.getEmail());
            _ps.executeUpdate();
            return true;
        }
        return false;
    }

    /**
     * Kiểm tra sự tồn tại của người dùng sử (Sử dụng trong chức năng đăng ký. 
     * Nếu thông đăng ký đã tồn tại thì thông báo lỗi)
     * @param accountInfo  Thông tin người dúng
     * @return <code>true</code> - Nếu tồn tại<br/>
     * @return <code>false</code> - Nếu không tồn tại
     */
    private boolean CheckExist(Account accountInfo) throws ClassNotFoundException, SQLException {
        _conn = getConnection();
        _stm = _conn.createStatement();
        _rs = _stm.executeQuery("SELECT * FROM account");
        while (_rs.next()) {
            String username = _rs.getString("AccountId");
            String email = _rs.getString("Email");
            if (accountInfo.getAccountId().equals(username)
                    || accountInfo.getEmail().equals(email)) {
                return true;
            }
        }
        return false;
    }
    
    /*
     * Đăng xuất
     */
    public void MemberSignout() throws SQLException {
        if (!_rs.isClosed() & _rs != null) {
            _rs.close();
        }
        
        if (!_ps.isClosed() && _ps != null) {
            _ps.close();
        }
        
        if (!_stm.isClosed() && _stm != null) {
            _stm.close();
        }
        
        if (_conn.isClosed() && _conn != null) {
            _conn.close();
        }
    }
}
